package com.cj.controller;

import com.cj.po.PageInfo;
import com.cj.po.Student;
import com.cj.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * 用户控制器类，负责处理与学生相关的请求
 */
@Controller
public class StudentController {
	// 注入学生服务，便于进行学生数据的操作
	@Autowired
	private StudentService studentService;

	/**
	 * 分页查询学生信息
	 * @param s_name 学生姓名
	 * @param s_studentid 学生ID
	 * @param s_classid 班级ID
	 * @param s_classname 班级名称
	 * @param pageIndex 当前页码
	 * @param pageSize 每页显示条数
	 * @param model 用于传递数据到视图
	 * @return 视图名称
	 */
	@RequestMapping(value = "/findStudent")
	public String findStudent(String s_name, Integer s_studentid, Integer s_classid, String s_classname,
							  Integer pageIndex, Integer pageSize, Model model) {
		// 调用服务层方法获取学生分页信息
		PageInfo<Student> pi = studentService.findPageInfo(s_name, s_studentid, s_classid,
				s_classname, pageIndex, pageSize);
		// 将学生分页信息和查询条件添加到模型中
		model.addAttribute("pi", pi);
		model.addAttribute("s_name", s_name);
		return "student_list";  // 返回学生列表视图
	}

	/**
	 * 导出学生信息为Excel文件
	 * @return 学生列表数据
	 */
	@RequestMapping(value = "/exportstudentlist", method = RequestMethod.POST)
	@ResponseBody
	public List<Student> exportStudent() {
		// 获取所有学生信息
		List<Student> studentList = studentService.getAll();
		return studentList;  // 返回学生列表
	}

	/**
	 * 删除指定的学生信息
	 * @param s_id 学生ID
	 * @return 重定向到学生列表视图
	 */
	@RequestMapping("/deleteStudent")
	@ResponseBody
	public String deleteStudent(Integer s_id) {
		// 调用服务层方法删除学生
		int s = studentService.deleteStudent(s_id);
		return "student_list";  // 返回学生列表视图
	}

	/**
	 * 添加新的学生信息
	 * @param student 学生对象
	 * @return 重定向到学生列表视图
	 */
	@RequestMapping(value = "/addStudent", method = RequestMethod.POST)
	@ResponseBody
	public String addStudent(@RequestBody Student student) {
		// 调用服务层方法添加学生
		int s = studentService.addStudent(student);
		return "student_list";  // 返回学生列表视图
	}

	/**
	 * 修改学生信息
	 * @param student 学生对象
	 * @return 重定向到学生列表视图
	 */
	@RequestMapping(value = "/updateStudent", method = RequestMethod.POST)
	public String updateStudent(Student student) {
		// 调用服务层方法更新学生信息
		int s = studentService.updateStudent(student);
		return "redirect:/findStudent";  // 重定向到查询学生视图
	}

	/**
	 * 根据学生ID查找学生信息用于编辑
	 * @param s_id 学生ID
	 * @param session 当前会话
	 * @return 编辑学生信息的视图
	 */
	@RequestMapping("/findStudentById")
	public String findStudentById(Integer s_id, HttpSession session) {
		// 调用服务层方法根据ID查找学生
		Student s = studentService.findStudentById(s_id);
		session.setAttribute("s", s);  // 将学生信息存入会话以供编辑页面使用
		return "student_edit";  // 返回学生编辑视图
	}
}
